/*
 * This file contains stuff needed to be as compatible to Informix as possible.
 * src/interfaces/ecpg/include/ecpg_informix.h
 */
#ifndef _ECPG_INFORMIX_H
#define _ECPG_INFORMIX_H

#include <ecpglib.h>
#include <pgtypes_date.h>
#include <pgtypes_interval.h>
#include <pgtypes_numeric.h>
#include <pgtypes_timestamp.h>

#define SQLNOTFOUND 100

#define ECPG_INFORMIX_NUM_OVERFLOW    -1200
#define ECPG_INFORMIX_NUM_UNDERFLOW -1201
#define ECPG_INFORMIX_DIVIDE_ZERO    -1202
#define ECPG_INFORMIX_BAD_YEAR        -1204
#define ECPG_INFORMIX_BAD_MONTH        -1205
#define ECPG_INFORMIX_BAD_DAY        -1206
#define ECPG_INFORMIX_ENOSHORTDATE    -1209
#define ECPG_INFORMIX_DATE_CONVERT    -1210
#define ECPG_INFORMIX_OUT_OF_MEMORY -1211
#define ECPG_INFORMIX_ENOTDMY        -1212
#define ECPG_INFORMIX_BAD_NUMERIC    -1213
#define ECPG_INFORMIX_BAD_EXPONENT    -1216
#define ECPG_INFORMIX_BAD_DATE        -1218
#define ECPG_INFORMIX_EXTRA_CHARS    -1264

#ifdef __cplusplus
extern "C"
{
#endif

extern int    rdatestr(date, char *);
extern void rtoday(date *);
extern int    rjulmdy(date, short *);
extern int    rdefmtdate(date *, char *, char *);
extern int    rfmtdate(date, char *, char *);
extern int    rmdyjul(short *, date *);
extern int    rstrdate(char *, date *);
extern int    rdayofweek(date);

extern int    rfmtlong(long, char *, char *);
extern int    rgetmsg(int, char *, int);
extern int    risnull(int, char *);
extern int    rsetnull(int, char *);
extern int    rtypalign(int, int);
extern int    rtypmsize(int, int);
extern int    rtypwidth(int, int);
extern void rupshift(char *);

extern int    byleng(char *, int);
extern void ldchar(char *, int, char *);

extern void ECPG_informix_set_var(int, void *, int);
extern void *ECPG_informix_get_var(int);
extern void ECPG_informix_reset_sqlca(void);

/* Informix defines these in decimal.h */
int            decadd(decimal *, decimal *, decimal *);
int            deccmp(decimal *, decimal *);
void        deccopy(decimal *, decimal *);
int            deccvasc(char *, int, decimal *);
int            deccvdbl(double, decimal *);
int            deccvint(int, decimal *);
int            deccvlong(long, decimal *);
int            decdiv(decimal *, decimal *, decimal *);
int            decmul(decimal *, decimal *, decimal *);
int            decsub(decimal *, decimal *, decimal *);
int            dectoasc(decimal *, char *, int, int);
int            dectodbl(decimal *, double *);
int            dectoint(decimal *, int *);
int            dectolong(decimal *, long *);

/* Informix defines these in datetime.h */
extern void dtcurrent(timestamp *);
extern int    dtcvasc(char *, timestamp *);
extern int    dtsub(timestamp *, timestamp *, interval *);
extern int    dttoasc(timestamp *, char *);
extern int    dttofmtasc(timestamp *, char *, int, char *);
extern int    intoasc(interval *, char *);
extern int    dtcvfmtasc(char *, char *, timestamp *);

#ifdef __cplusplus
}
#endif

#endif                            /* ndef _ECPG_INFORMIX_H */
